package main

import "fmt"

func main()  {
	//练习1：打印1-100内，所有的偶数
	/*
	偶数就是2 4 6 8 ..... 100,就是一个数余2如果==0，也就是2%2==0 4%2=0
	i=1 1%2!=0
	i=2 2%2==0
	*/
	//方法1
	for i:=1;i<=100;i++{
		if i%2==0 {
			fmt.Print(i," ")
		}
	}
	fmt.Println()
	//方法2，每走一步+2，然后打印
	for i:=2;i<=100;i+=2{
			fmt.Print(i," ")
	}

	fmt.Println()
	//练习2：打印1-100内，能被3整除，不能被5整除的数，每行打印5个
	/*
	1.能被3整除 1%3==0
	2.不能被5整除 1%5!=0
	3.每行打印5个数字，就是用到一个计算变量，来统计个数，如果个数是5的倍数就换行。
	*/
	fmt.Println("能被3整除不能被5整除的数是：")
	count1:=0
	for i:=1;i<=100;i++{
		if i%3==0 && i%5!=0 {
			count1++
			fmt.Print(" ",i)
			if count1%5==0 {
				fmt.Println()
			}

		}
	}
	fmt.Println()
	//练习3：求1-100内，奇数的和
	/*
	1.奇数就是1,3,5,7,9,规律就是不能被2整除
	2.奇数的和就是得到所有奇数后累加,需要用到一个变量num1来存累加后的数字
	第一次i=1,i<100成立,执行循环体1余2不等于0成立，然后把i的值加num1的值再赋值给num1，然后执行表达式3，i++,1+1=2
	第二次i=2,i<100成立，执行循环体2余2等于0不成立，然后跳过if语句，然后执行表达式3，i++,2+1=3
	第三次i=3,i<100成立，执行循环体3余2不等于0成立，然后把i的值3加num1的值1再赋值给num1,num1的值为4，然后执行表达式3，i++,3+1=4
	以此类推
	*/
	num1:=0
	for i:=1;i<=100;i++{ //i=1,2,3,4,5.....100
		if i%2!=0 {
			num1+=i
		}
	}
	fmt.Println("所有的奇数和为：",num1)
	//练习4：打印2-100内的素数
	/*
	素数是指除了1和它本身，不能被其他自然数整除，就是1不用除，一直除到它前面数即可。如果都不能被整除就是素数
	最好的方法是用一个计数变量统计，如果有一次被整除不是素数，直接放弃循环，直接计算下一个数,如果都不能被整除即是素
	这个数和比他小不包括1的数都循环完后，在for循环外判断一下count是否等于0，如果等于0，打印是素数。
	计算2-100，同理，只在原来基础上套一个循环从2循环到100为止
	注意count统计变量应该放到最外层循环里面，每次重新执行最外层循环都要把count初始化为0，否则后面就都不是素数了。
	*/
	//j:=7

	for j:=2;j<=100;j++{
		count2:=0
		for i:=2;i<j;i++{
			if j%i==0 {
				count2++
			}
		}
		if count2 == 0{ //如果条件成立才打印“是素数”
			fmt.Print(j,"是素数 ")
		}
	}

	/*
		练习5：百元百鸡，一百元钱买100只鸡，公鸡5元一只，母鸡3元一只，小鸡1元3个。
		公鸡：0-20
		母鸡：0-33
		小鸡：100-公鸡-母鸡

		 */
		 fmt.Println()
	for i := 0 ;i<= 20;i++{//公鸡
		for j:=0;j<=33;j++{//母鸡
			k := 100-i-j // 小鸡的数量
			if i * 5 + j * 3 + k / 3 == 100 && k % 3 == 0{
				fmt.Println("公鸡:",i,"母鸡:",j,"小鸡:",k)
			}

		}
	}
	/*
	原理
	第一步，先穷举公鸡100次
	第二步，穷举母鸡100次
	第三步，穷举小鸡100次
	上面利用循环嵌套，循环100次三列的数，把可能的数集合都列出来，比如我这里就列了5遍，当然你可以列100遍
	比如
	0 0 0
0 0 1
0 0 2
0 0 3
0 0 4
0 0 5
0 1 0
0 1 1
0 1 2
。。。。。
5 5 3
5 5 4
5 5 5


	for {
		for {
			for {
				fmt.Println(x,y,z)
			}
		}
	}
	*/
	var x,y,z int
	var count int
	for x=0;x<=100;x++{
		for y=0;y<=100;y++{
			for z=0;z<=100;z++{
				count++
				if x*5+y*3+z/3==100 && x+y+z==100 && z%3==0{
					fmt.Println(x,y,z)
				}
			}
		}
	}
	fmt.Println("--------")
	gongji:=5
	muji:=3
	xiaoji:=1
	price:=100
	//fmt.Print(gongji,muji,xiaoji,price)
	fmt.Println()
	//代表100元可以买多少只公鸡
	for i:=0;i<price/gongji+1;i++{
		//100元可以买多少只母鸡
		for j:=0;j<=price/muji+1;j++{
			//代表100元可以买多少只小鸡
			for k:=0;k<price/xiaoji+1;k++{
				if i*gongji+j*muji+k*xiaoji/3==price && i+j+k==price && k%3==0{
					fmt.Println(i,j,k)
				}

			}
		}

	}


}
